<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var obj = {
            id: 1,
            pname: '小米',
            price: 1999,
        };
        // 1,以前的对象添加和修改属性的方式
        // obj.num = 1000;
        // obj.price = 99;
        // console.log(obj);
        // 2，Object.defineProperty()定义对象中新属性或修改原有的属性
        Object.defineProperty(obj, 'num', {
            value: 1000,
            enumerable: true
        });
        console.log(obj);
        Object.defineProperty(obj, 'price', {
            value: 9.9
        });
        console.log(obj);
        Object.defineProperty(obj, 'id', {
            //如果值为false不允许修改这个属性值 他的默认值也是false
            writable: false,
        });
        obj.id = 2;
        console.log(obj);
        Object.defineProperty(obj, 'address', {
            value: '连云港花果山大道',
            writable: false,
            // enumerable如果值为 false 则不允许遍历，默认的值是false
            enumerable: false,
            // configurable如果值为false则不允删除这个属性，不允许再修改第三个参数里面的特性， 默认的值是false
            configurable: false
        });
        console.log(obj);
        console.log(Object.keys(obj));
        delete obj.address;
        console.log(obj);
        delete obj.pname;
        console.log(obj);
        Object.defineProperty(obj, 'address', {
            value: '连云港花果山大道',
            writable: true,
            // enumerable如果值为 false 则不允许遍历，默认的值是false
            enumerable: true,
            // configurable如果值为false则不允许删除这个属性， 默认的值是false
            configurable: true
        });
        console.log(obj.address);
    </script>
</body>

</html>